#include "MtxAdvance.h"
#ifndef __VECTOR3_H__
#define __VECTOR3_H__

namespace MTX
{
	class Vector3
	{
	public:
		inline Vector3(float fX,float fY,float fZ)
			:x(fX),y(fY),z(fZ){}
		inline Vector3()
			:x(0),y(0),z(0){}
		inline Vector3(const Vector3& w)
			:x(w.x),y(w.y),z(w.z){}
		inline float operator[] (int i) const;
		inline bool operator== (const Vector3& w) const;
		inline Vector3 operator- (void) const;
		inline Vector3 operator+ (const Vector3& w) const;
		inline Vector3 operator- (const Vector3& w) const;
		inline float operator* (const Vector3& w) const;
		inline Vector3 operator* (const float fScalar) const;
		inline Vector3 operator/ (const Vector3& w) const;
		inline Vector3 operator/ (const float fScalar) const;
		inline Vector3& operator+= (const Vector3& w);
		inline Vector3& operator-= (const Vector3& w);
		inline Vector3& operator*= (const Vector3& w);
		inline Vector3& operator*= (const float fScalar);
		inline Vector3& operator/= (const Vector3& w);
		inline Vector3& operator/= (const float fScalar);
		inline Vector3 Cross(const Vector3& w) const;
		inline float Dot(const Vector3& w) const;
		inline float Length(void) const;
		inline bool Normalized(void) const;
		inline void Normailze(void);
		inline float Distance(const Vector3& w) const;
		inline bool IsZeroLength(void) const;
	private:
		float x,y,z;
	};
}

#endif